#include "../../Common/Detail.hpp"
#include "../../Client/RpcClient.hpp"
#include <thread>

void CallBack(const Json::Value &json)
{
    std::cout << json.asInt() << std::endl;
}

int main()
{
    // 对于rpc客户端
    // 1. 创建出一个rpc客户端
    //    true -- 支持服务发现，传入的时注册中心的ip+端口
    RpcModule::ClientModule::RpcClient::ptr client =
        std::make_shared<RpcModule::ClientModule::RpcClient>(true, "127.0.0.1", 8085);
    // 2. 向服务端发起rpc请求
    //    2.1 支持服务发现，先进行服务发现
    //       在Call中，如果支持服务发现，会先进行服务发现，所以不需要自己进行服务发现
    //    2.2 有特定的服务，连接服务端，向服务端发起rpc请求
    //       在Call中，如果发现了对应的服务，会自动连接服务端，所以也不需要自己进行连接
    // 3. 同步/异步/回调函数测试
    //    3.1 同步发送请求测试
    Json::Value params;
    params["num1"] = 11;
    params["num2"] = 22;
    Json::Value result;
    client->Call("Add", params, result);
    std::cout << "同步测试结果为：" << result.asInt() << std::endl;
    //    3.2 异步发送请求测试
    RpcModule::ClientModule::RpcCaller::JsonAsyncResponse future;
    params["num1"] = 22;
    params["num2"] = 33;
    client->Call("Add", params, future);
    std::cout << "异步测试结果为：" << future.get().asInt() << std::endl;
    //    3.3 回调函数发送请求测试
    params["num1"] = 33;
    params["num2"] = 44;
    client->Call("Add", params, CallBack);

    std::this_thread::sleep_for(std::chrono::seconds(6));
    return 0;
}